基本声明:
|
|
union是所有内部成员共用同一块内存,所有成员的内存地址相同,与union的起始地址相同。故修改任意成员,会导致其他成员的值都会变化(共享同一块内存)。
union的大小(sizeOf)需要可以装下最大尺寸的成员。且由于内存对齐,大小是所有成员尺寸的整数倍。
故testUnion的大小为:
i = 4; d = 8; c = 1; array = 9 1;
sizeOf(testUnion) = 16; (最大是double成员的8字节,由于array总共9字节,故需要扩展为2倍,8 2 = 16字节)。
union与struct的区别:
- struct的大小是所有成员尺寸之和,union是不小于最大成员尺寸。因此union内存使用更加灵活。
- union同时只能保存一个成员的值,struct每个成员的值独立(有独立的内存地址)。
union可以用于数据类型转换(如union实例包含int和array,传入array可以得到int数据)。
相关资料: